package com.vcredit.creditcat.vo;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;

public class RedisDO {
	public Jedis jedis;

	private static JedisPool pool = null;

	public void close() {
		jedis.disconnect();
		jedis = null;
	}

	public Jedis open(String ip, Integer port) {
		// 池基本配置
		JedisPoolConfig config = new JedisPoolConfig(); //
		// 最大连接数, 默认8个
		config.setMaxTotal(20); //
		// 控制一个pool最多有多少个状态为idle(空闲的)的jedis实例。
		config.setMaxIdle(5);
		// 表示当borrow
		// (引入)一个jedis实例时，最大的等待时间，如果超过等待时间，则直接抛出JedisConnectionException；
		config.setMaxWaitMillis(10000); //
		// 在borrow一个jedis实例时，是否提前进行validate操作；如果为true，则得到的jedis实例均是可用的；
		config.setTestOnBorrow(false);

		// 创建redis连接池

		pool = new JedisPool(config, ip, port);

		boolean borrowOrOprSuccess = true;
		try {
			jedis = pool.getResource();
			// do redis opt by instance
		} catch (JedisConnectionException e) {
			borrowOrOprSuccess = false;
			if (jedis != null)
				pool.returnBrokenResource(jedis);

		} finally {
			if (borrowOrOprSuccess)
				pool.returnResource(jedis);
		}
		jedis = pool.getResource();
		return jedis;
	}

//	/**
//	 * 释放jedis资源
//	 * 
//	 * @param jedis
//	 */
//	public void returnResource(Jedis jedis) {
//		if (jedis != null) {
//			pool.returnResource(jedis);
//		}
//	}
}